<?php

class Table extends Widget
{
    protected $dataProvider, $model;

    public function __construct($params=array())
    {
        if(isset($params['dataProvider'])){
            $dataProvider=$params['dataProvider'];

            if(is_object($dataProvider)){
                $this->dataProvider=$dataProvider;
                $this->model=$dataProvider->model;
                $this->data=$dataProvider->data;
            }else{
                $this->error='Передан неправильный провайдер данных. Это должен быть объект';
            }
        }else{
            if(isset($params[0])){
                if(is_object($params[0])) $this->model=$params[0];
                elseif(is_string($params[0])){
                    $model=ucfirst($params[0]);
                    $this->model=Model::model($model);
                }else{
                    $this->error='Передана неправильная модель. Это должно быть либо имя модели, либо объект';
                }
            }else{
                $this->error='Не указана модель';
            }
            if(isset($params['data'])){
                $this->data=$params['data'];
                unset($params['data']);
            }
        }

        if(isset($params['htmlOptions'])){
            $this->options=$params['htmlOptions'];
            unset($params['htmlOptions']);
        }

        $this->params=$params;
    }

    public function createWidget()
    {
        if($view=$this->checkView()){
            if(!$columns=$this->model->attributeNames){
                Sys::app()->error='В виджет Table передана неправильная модель';
                return false;
            }

            $className=get_class($this->model);

            $ajax=$this->options['ajax'];
            $title=isset($this->params['title']) ? $this->params['title'] : $className;
            $data=is_array($this->data) ? $this->data : array($this->data);
            $class=isset($this->options['class']) ? $this->options['class'] : 'table';
            $id=isset($this->options['elementId']) ? $this->options['elementId'] : strtolower($className).'-table';
            if($this->dataProvider) $pagination=$this->dataProvider->pagination;
            else $pagination='';
            if($this->dataProvider) $elementsPerPage=$this->dataProvider->elementsPerPage;
            else $elementsPerPage='';

            if(is_file(THEMES.Sys::app()->controller->theme.SEP.'img'.SEP.'ajax'.SEP.'ajax-loader.gif')) $ajaxLoadImg=Sys::app()->controller->themeUrl.'img'.SEP.'ajax'.SEP.'ajax-loader.gif';
            else $ajaxLoadImg=BASEURL.'framework'.SEP.'img'.SEP.'ajax'.SEP.'ajax-loader.gif';

            ob_start();
                require_once($view);
                $view=ob_get_contents();
            ob_end_clean();

            return $view;
        }

        return false;
    }
}